﻿using System;

namespace SeoulOpenApi.Air
{
	/// <summary>
	/// 서울시 Open API 대기 오염도
	/// </summary>
	public class AirService : BaseService
	{
		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		public AirService() : this(null, null) { }

		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		/// <param name="userId">서울시 API접속 ID</param>
		/// <param name="authKey">서울시로부터 발급받은 인증키</param>
		/// <remarks>인증키 발급: http://mobile.openapi.seoul.go.kr/ </remarks>
		public AirService(string userId, string authKey)
		{
			base.UserID = userId;
			base.AuthKey = authKey;
		}


		/// <summary>
		/// 서비스 항목에 따라 데이터 가져오기
		/// </summary>
		/// <param name="name">서비스명</param>
		/// <returns></returns>
		protected override SoapData getSoapData(string name)
		{
			var soap = new SoapData { Address = new Uri(ApiUrlPrefix + "AirService?wsdl", UriKind.Absolute) };
			switch (name)
			{
				case "searchAirGuList":
					soap.Name = "searchAirGuList";
					soap.Description = "대기 지역 목록(구) 검색";
					soap.SoapBody = "<ns:searchAirGuList xmlns:ns='http://service.air.openapi.ubizvalley.com'>" +
									"</ns:searchAirGuList>";
					break;
				case "getSeoulPM10AvgInfo":
					soap.Name = "getSeoulPM10AvgInfo";
					soap.Description = "서울 현재시간 미세먼지 조회";
					soap.SoapBody = "<ns:getSeoulPM10AvgInfo xmlns:ns='http://service.air.openapi.ubizvalley.com'>" +
									"</ns:getSeoulPM10AvgInfo>";
					break;
				case "searchAirStateInfo":
					soap.Name = "searchAirStateInfo";
					soap.Description = "지역별 대기 현황 정보 제공";
					soap.SoapBody = "<ns:searchAirStateInfo xmlns:ns='http://service.air.openapi.ubizvalley.com'>" +
									"<ns:siteCode>{0}</ns:siteCode>" + // 변수: 지역코드
									"</ns:searchAirStateInfo>";
					break;
			}

			// 해당 서비스가 없는 경우
			if (String.IsNullOrEmpty(soap.Name))
				throw new Exception(name + " not found.");

			return soap;
		}
	}
}
